perm filename TEST1V.SAI[CRE,BGB] blob
sn#116047 filedate 1974-08-19 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "TEST1V"
C00004 00003 α EXERCISE LOOP
C00006 ENDMK
C⊗;
BEGIN "TEST1V"
REQUIRE "ABBREV[SYS,BGB]" SOURCE_FILE;
REQUIRE "RANDOM[SYS,BGB]" LOAD_MODULE;
EXTERNAL REAL PROCEDURE RANDOM;
REQUIRE "SAITRG[SYS,BGB]" SOURCE_FILE;
REQUIRE "LS1V3P" LOAD_MODULE;
EXTERNAL ITG PROCEDURE LS1V3P(REAL ARRAY V,P1,P2,P3,V3P);
α WORKING SPACE AND NAMINGS;
INTEGER NROOTS,II,I;
REAL L2,L3,R,RMIN,RXY,ERR,ERRMAX;
REAL ARRAY P1,P2,P3,V3P[1:3],V[1:10,1:3];
DEFINE X1="P1[1]",X2="P2[1]",X3="P3[1]";
DEFINE Y2="P2[2]",Y3="P3[2]",Z3="P3[3]";
REAL PROCEDURE VERIFY (REAL X,Y,Z);
BEGIN "VERIFY"
DEFINE THRICE = "FOR I←1 STEP 1 UNTIL 3 DO";
INTEGER I;
REAL LA,LB,LC,CA,CB,CC;
REAL ARRAY ALEG,BLEG,CLEG,L[1:3];
L[1]←X;L[2]←Y;L[3]←Z;
THRICE ALEG[I] ← P3[I] - L[I];
THRICE BLEG[I] ← P1[I] - L[I];
THRICE CLEG[I] ← P2[I] - L[I];
LA ← SQRT(ALEG[1]↑2 + ALEG[2]↑2 + ALEG[3]↑2);
LB ← SQRT(BLEG[1]↑2 + BLEG[2]↑2 + BLEG[3]↑2);
LC ← SQRT(CLEG[1]↑2 + CLEG[2]↑2 + CLEG[3]↑2);
CA ← (BLEG[1]*CLEG[1]+BLEG[2]*CLEG[2]+BLEG[3]*CLEG[3])/(LB*LC);
CB ← (ALEG[1]*CLEG[1]+ALEG[2]*CLEG[2]+ALEG[3]*CLEG[3])/(LA*LC);
CC ← (ALEG[1]*BLEG[1]+ALEG[2]*BLEG[2]+ALEG[3]*BLEG[3])/(LA*LB);
ERR ← (ABS(CA-V3P[1]) + ABS(CB-V3P[2]) + ABS(CC-V3P[3]))/3;
RETURN(ERR);
END "VERIFY";
α EXERCISE LOOP;
FOR II←1 STEP 1 UNTIL 100 DO
BEGIN "FOREVER"
INTEGER TIME0,TIME1,TIMES;
α GENERATE A LANDMARK TRIANGLE;
X1 ← 20*RANDOM + 1;
X2 ← 20*RANDOM + 1;
Y2 ← 20*RANDOM + 1;
X3 ← 20*RANDOM + 1;
Y3 ← 20*RANDOM + 1;
Z3 ← 20*RANDOM + 1;
α COMPUTE THE COSINES AT THE CAMERA;
L2 ← SQRT(X2↑2 + Y2↑2);
L3 ← SQRT(X3↑2 + Y3↑2 + Z3↑2);
V3P[3] ← X2 / L2;
V3P[1] ← (X2*X3+Y2*Y3)/ (L2*L3);
V3P[2] ← X3 / L3;
V3P[2]↔V3P[3];V3P[1]↔V3P[2];
α THROW THE SHIT AT THE FAN;
NROOTS ← LS1V3P (V,P3,P1,P2,V3P);
RMIN ← 1000;
α OUTPUT THE RESULTS;
IF NROOTS < 0 THEN OUTSTR(" NO ROOTS - GAP LOW.") ELSE
IF NROOTS = 0 THEN OUTSTR(" NO ROOTS - GAP HIGH") ELSE
FOR I←1 STEP 1 UNTIL NROOTS DO
RMIN ← RMIN MIN SQRT(V[I,1]↑2+V[I,2]↑2+V[I,3]↑2);
OUTSTR(CVG(RMIN)&9);
IF RMIN>0.1 THEN
⊂ OUTSTR("LOSE"&↓);INCHRW;⊃
ELSE OUTSTR("WIN"&↓);
END "FOREVER";
END "TEST1V"